package adminModels

import (
	"appService/src/application/app/appModels"
	"appService/src/authValid/userAuthType"
	"errors"
	"github.com/gogf/gf/util/gvalid"
	"xorm.io/builder"
	"xorm.io/xorm"
)

//角色表
type Roles struct {
	Id              string   `json:"id" xorm:"varchar(128) pk notnull unique"`        //id guid
	RoleName        string   `json:"role_name" xorm:"varchar(60)"`                    //角色名称
	RoleType        int      `json:"role_type" xorm:"tinyint(1) notnull default(1)"`  //角色类型，和账号类型一样
	AuthGroupId     string   `json:"auth_group_id" xorm:"varchar(128) notnull index"` //权限组ID
	BranchId        []string `json:"branch_id" xorm:"text json"`                      //部门机构ID列表
	AuthId          []string `json:"auth_id" xorm:"text json"`                        //菜单权限列表
	DefaultApiCode  []string `json:"default_api_code" xorm:"text json"`               //前置的数据接口权限（默认必须有的）
	ApiCode         []string `json:"api_code" xorm:"text json"`                       //数据接口权限
	Desc            string   `json:"desc" xorm:"varchar(512)"`                        //角色描述
	appModels.MTime `xorm:"extends"`
}

//添加数据校验
func (this *Roles) AddValid() error {
	rules := []string{
		"Id@required#ID不能为空",
		"RoleName@required#角色名称不能为空",
		"AuthGroupId@required#请选择所属权限组",
	}
	err := gvalid.CheckStruct(this, rules, nil)
	if err == nil {
		return nil
	} else {
		return errors.New(err.FirstString())
	}
}

//修改数据校验
func (this *Roles) EditValid() error {
	rules := []string{
		"Id@required#ID不能为空",
		"RoleName@required#角色名称不能为空",
		"AuthGroupId@required#请选择所属权限组",
	}
	err := gvalid.CheckStruct(this, rules, nil)
	if err == nil {
		return nil
	} else {
		return errors.New(err.FirstString())
	}
}

//获取模型
func (this *Roles) Model() interface{} {
	return new(Roles)
}

//获取模型切片
func (this *Roles) Slice() interface{} {
	return new([]Roles)
}

//初始化数据
func (this *Roles) Init(db *xorm.Session, guid string, loginUser *appModels.UserInfo) error {
	this.Id = guid
	return nil
}

//添加之前调用，判断是否可添加，设置添加条件等
func (this *Roles) AddWhere(db *xorm.Session, loginUser *appModels.UserInfo) error {
	return nil
}

//删除之前调用，判断是否可删除，设置删除条件等
func (this *Roles) DeleteWhere(db *xorm.Session, loginUser *appModels.UserInfo, ids ...string) error {
	db.Where(builder.In("id", ids))
	return nil
}

//修改之前调用，判断是否可修改，设置修改条件
func (this *Roles) EditWhere(db *xorm.Session, loginUser *appModels.UserInfo) error {
	if this.Id == "" {
		return errors.New("请选择要修改的数据")
	}
	db.Where(builder.Eq{"id": this.Id})
	db.MustCols("branch_id,auth_id,front_api_code,api_code").Omit("aid")
	return nil
}

//查询一条数据条件
func (this *Roles) GetWhere(db *xorm.Session, loginUser *appModels.UserInfo, id string) error {
	return nil
}

//查询列表条件、查询分页数据条数条件
func (this *Roles) ListWhere(db *xorm.Session, loginUser *appModels.UserInfo) error {
	db.Desc("created")
	if this.AuthGroupId != "" {
		db.Where(builder.Eq{"auth_group_id": this.AuthGroupId})
	}
	if loginUser.Account.AccountType != userAuthType.SYSTEM_ADMIN {
		db.Where(builder.Lte{"role_type": loginUser.Account.AccountType})
	}
	return nil
}

//查询分页时条件
func (this *Roles) PaginateWhere(db *xorm.Session, loginUser *appModels.UserInfo) error {
	return nil
}
